package com.zwx.aray.findJewels;

import java.util.HashSet;
import java.util.Set;

/**
 * 一个字符串J，里面是字母组成，有的字母可以代表宝石，有的只是石头；
 * 是不是宝石取决于字符串S中是否包含J元素。（区分大小写）
 *
 * @author 文希
 * @create 2019-06-26 23:46
 */
public class FindJewels {
    /**
     * 双重for循环，不推荐
     */
    public static int findJewels(String j, String s) {
        int num = 0;
        for (char newS : s.toCharArray()) {
            for (char newJ : j.toCharArray()) {
                if (newS == newJ) {
                    num++;
                }
            }
        }
        return num;
    }

    /**
     * 借助集合的特性
     */
    public static int numJewelsInstones(String j, String s) {
        int res = 0;
        Set<Object> setJ = new HashSet<>();
        for (char jj : j.toCharArray()) {
            setJ.add(jj);
        }
        for (char ss : s.toCharArray()) {
            if (setJ.contains(ss)) {
                res++;
            }
        }
        return res;
    }

    /**
     * 正则表达式
     */
    public static int numResJewelsInstones(String j, String s) {
        return s.replaceAll("[^" + j + "]", "").length();
    }

    public static void main(String[] args) {
        String j = "Aa";
        String s = "aAAAAbbbbb";
        int i = findJewels(j, s);
        System.out.println("i = " + i);
        int i1 = numJewelsInstones(j, s);
        System.out.println("i1 = " + i1);
        int i2 = numResJewelsInstones(j, s);
        System.out.println("i2 = " + i2);
    }
}
